package com.uniknow.app.action;

import java.sql.SQLException;
import java.util.ArrayList;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.uniknow.app.AppConfig;
import com.uniknow.app.bin.TBCallLog;
import com.uniknow.app.bin.TBSMS;
import com.uniknow.app.manager.CallLogManager;
import com.uniknow.app.manager.DatabaseHelper;
import com.uniknow.app.operate.BaseListener;
import com.uniknow.app.util.StringUtils;

/**
* Calog逻辑业务处理层
* @author lianjiao
*
*/
public class ActionCalog {
	private Context mContext;
	private CallLogManager calManager;
	
	public ActionCalog (Context context){
		super();
		mContext = context;
		calManager = new CallLogManager(mContext, TBCallLog.class);
	}
	/**
	 * 初始化通话记录表数据，先清空表，然后从系统中获取通话记录重新插入表中
	 * @author lianjiao 
	 * @created 2013-11-21
	 */
	public void initData(final BaseListener listener){
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				try {
					initCalllog(mContext);
					listener.onSuccess("");
				} catch (SQLException e) {
					e.printStackTrace();
					listener.onError(e.getMessage());
				}
			}
		}).start();
		
	}
	/**
	 * 方法名：appendData
	 * 描述：通话记录表数据，追加数据
	 * @参数：   参数名  参数类型   参数描述
	 * @返回值类型： void   
	 * @创建时间：  2015年3月13日 
	 * @创建者：韩创
	 * @变更记录：2015年3月13日下午3:57:14 by
	 */
	public void appendData(final BaseListener listener){
		new Thread(new Runnable() {
				
				@Override
				public void run() {
					appendCalllog(mContext);
					listener.onSuccess("");
				}
				
		}).start();
	}
	
	
	/**
	 * 清空原有通话记录表数据，并初始化表数据从系统通话记录中
	 * 方法名：initCalllog
	 * 描述：
	 * @参数：   参数名  参数类型   参数描述
	 * @返回值类型： void   
	 * @创建时间：  2015年3月13日 
	 * @创建者：韩创
	 * @变更记录：2015年3月13日下午3:42:55 by
	 */
	public static void initCalllog(Context mContext) throws SQLException{
		CallLogManager calManager = new CallLogManager(mContext, TBCallLog.class);
		DatabaseHelper.getHelper(mContext).deleteData(TBCallLog.class);
		ArrayList<TBCallLog> list = calManager.GetCalogList(0);
		calManager.InsertCalog(list);
	}
	/**
	 * 方法名：appendCalllog
	 * 描述：通话记录表追加新数据
	 * @参数：   参数名  参数类型   参数描述
	 * @返回值类型： void   
	 * @创建时间：  2015年3月13日 
	 * @创建者：韩创
	 * @变更记录：2015年3月13日下午3:50:58 by
	 */
	public static void appendCalllog(Context mContext){
		CallLogManager calManager = new CallLogManager(mContext, TBCallLog.class);
		TBCallLog lastCallLog = calManager.getFirst(false);
		if(lastCallLog!=null){
			if(StringUtils.isAllNumber(lastCallLog.getDate())){
				int lastTime = Integer.parseInt(lastCallLog.getDate());
				ArrayList<TBCallLog> list = calManager.GetCalogList(lastTime);
				calManager.InsertCalog(list);
			}
		}
	}
	
	/**
	 * 根据tel和时间段，统计通话数量
	 * @author lianjiao 
	 * @created 2013-11-27
	 * @param tel
	 * @param months 单位：月
	 * @return
	 */
	public int GetCalogCount(String tel,int months,final BaseListener listener){
		//listener 有可能为null
		int count = 0;
		//DatabaseHelper dbHelper = DatabaseHelper.getInstance(mContext);
		SQLiteDatabase db = DatabaseHelper.getHelper(mContext).getWritableDatabase();//DatabaseHelper.OpenDataBase(mContext);
		String sql = "select * from "+AppConfig.TB_PHONE_Calllog+" where date>(strftime('%s',date('now')))-2592000*"+(StringUtils.isEmpty(months+"")?12:months);
		if(!StringUtils.isEmpty(tel)){
			sql+=" and tel = "+tel;
		}
		System.out.println("sql = "+sql);
		Cursor cursor = db.rawQuery(sql, null);
		count = cursor.getCount();
		cursor.close();
		//db.close();
		//dbHelper.close();
		return count;
	}
	/**
	 * 根据参数获得通话频率列表
	 * @author lianjiao 
	 * @created 2013-12-9
	 * @param isdesc 是否为降序排列
	 * @param is11 是否过滤非11位电话
	 * @param months 几个月内的通话记录
	 * @return ArrayList
	 */
	public ArrayList<TBCallLog> GetCalogListByParam(boolean isdesc,boolean is11,int months){
		ArrayList<TBCallLog> listCalog = new ArrayList<TBCallLog>();
		TBCallLog calog;
		//DatabaseHelper dbHelper = DatabaseHelper.getInstance(mContext);
		SQLiteDatabase db = DatabaseHelper.getHelper(mContext).getWritableDatabase();//DatabaseHelper.OpenDataBase(mContext);
		String sql = "select _id,type,date,tel,runtime,count(tel) as times from "+AppConfig.TB_PHONE_Calllog+" where 1=1";
			   sql+=" and date>(strftime('%s',date('now')))-2592000*"+(StringUtils.isEmpty(months+"")?12:months);
			  if(is11) sql+=" and length(tel)=11";
			  if(isdesc) sql+=" group by tel order by times desc"; else sql+=" group by tel order by times asc";
		Cursor cursor = db.rawQuery(sql, null);
		if (cursor != null) {
			while (cursor.moveToNext()) {
				calog = new TBCallLog();
				calog.set_id(cursor.getInt(0));
				calog.setType(cursor.getInt(1));
				calog.setDate(cursor.getString(2));
				calog.setTel(cursor.getString(3));
				calog.setRuntime(cursor.getInt(4));
				calog.setTimes(cursor.getInt(5));
				listCalog.add(calog);
			}
		}
		cursor.close();
		//db.close();
		//dbHelper.close();
		return listCalog;
		
	}

}
